package anr.desu.pmo.proyecto.model.dao.jpa;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import anr.desu.pmo.proyecto.model.Entregable;
import anr.desu.pmo.proyecto.model.dao.EntregableDAO;

public class JPAEntregableDAO implements EntregableDAO{

	private EntityManager em;
	
	public JPAEntregableDAO(EntityManager em){
		this.em=em;
	}

	@Override
	public Entregable findById(Integer id) {
		Query query = null;
		try{
			query=em.createQuery("Select o From Entregable o Where o.identregable=?1");
			query.setParameter(1, id);
		}catch(Exception e){
			System.out.println("mensaje: "+e.getMessage());
		}
		return (Entregable)query.getSingleResult();
	}

	@Override
	public Entregable insert(Entregable o) {
		em.persist(o);
		return o;
	}

	@Override
	public List<Entregable> findAll() {
		Query query=em.createQuery("Select o From Entregable o");
		return query.getResultList();
	}

	@Override
	public void update(Entregable o) {
		em.merge(o);
	}

	@Override
	public void delete(Entregable o) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<Entregable> findByIdProyecto(Integer id) throws Exception{ 
		Query query = null;
		try{
			query=em.createQuery("Select o From Entregable o Where o.numPosicion = 0 and o.proyecto.idproyecto=?1 " +
					"Order by o.codentregable");
			query.setParameter(1, id);
			return query.getResultList();
		}catch(Exception e){
			System.out.println("mensaje: "+e.getMessage());
			return null;
		}
	}

	@Override
	public Integer findIdMayor(Integer id) {
		Query query=em.createQuery("Select max(o.identregable) From Entregable o Where o.proyecto.idproyecto =?1");
		query.setParameter(1, id);
		return (Integer)query.getSingleResult();
	}

	@Override
	public List<Entregable> findByNumPosicion(Integer num, Integer id) throws Exception{ 
		Query query = null;
		try{
			query=em.createQuery("Select o From Entregable o Where o.numPosicion=?1 and " +
					" o.proyecto.idproyecto=?2");

			query.setParameter(1, num);
			query.setParameter(2, id);
			
			return query.getResultList();
		}catch(Exception e){
			System.out.println("mensaje: "+e.getMessage());
			return null;
		}
	}
	
	@Override
	public List<Entregable> findByPrecondicion(Integer idprec, Integer id) throws Exception{ 
		Query query = null;
		try{
			query=em.createQuery("Select o From Entregable o Where o.precondicion.identregable=?1 and " +
					" o.proyecto.idproyecto=?2");
			query.setParameter(1, idprec);
			query.setParameter(2, id);
			return query.getResultList();
		}catch(Exception e){
			System.out.println("mensaje: "+e.getMessage());
			return null;
		}
	}
}
